package cs.uns.edu.ar.aygps.service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import cs.uns.edu.ar.aygps.db.ConnectionFactory;
import cs.uns.edu.ar.aygps.model.Localidad;
import cs.uns.edu.ar.aygps.model.exception.AyGPSException;

public class LocalidadService extends ModelService {
	private static HashMap<Integer, Localidad> localidades = new HashMap<Integer, Localidad>();

	public LocalidadService(String service) {
		super(service);
	}

	@Override
	public void executeService() throws AyGPSException {
		// TODO Auto-generated method stub

	}
	
	
	
		
	public Localidad getLocalidadByName(String nombre) {
		if (localidades.isEmpty()){
			loadLocalidades();
		}
		
		Iterator iter = localidades.values().iterator();
		
		while (iter.hasNext()) {
			Localidad loc = (Localidad) iter.next();
			if (loc.getNombre().equals(nombre))	{
				return loc;
			}
		}
		return null;		
	}
	
	public String[]	getLocalidadesNamesAsStringArray(){
		if (localidades.isEmpty()){
			loadLocalidades();
		}
		
		Iterator iter = localidades.values().iterator();
		ArrayList<String> locs = new ArrayList<String>();
		while (iter.hasNext()) {
			Localidad l = (Localidad) iter.next();
			locs.add(l.getNombre());
		}
		return locs.toArray(new String[0]);	
	}

	
	private static final String FIND_LOCALIDADES = "SELECT ID, NOMBRE FROM APP.LOCALIDAD ORDER BY NOMBRE";
	
	private void loadLocalidades() {
		Connection conn;
		
		try {
			conn = ConnectionFactory.getInstance().getConnection();
			PreparedStatement ps = conn.prepareStatement(FIND_LOCALIDADES);
			
			ResultSet rs = ps.executeQuery();
			
			while (rs.next()){
				Localidad l = new Localidad();
				l.setId(rs.getInt(1));
				l.setNombre(rs.getString(2));
				localidades.put(new Integer(l.getId()), l);
			}				
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}

	public Localidad getLocalidadByID(int id) {
		if (localidades.isEmpty()){
			loadLocalidades();
		}
		return localidades.get(new Integer(id));
	}

}
